﻿using BaoVeBienCuong.Playgame.army;
using BaoVeBienCuong.Playgame.Button;
using BaoVeBienCuong.Playgame.enemy;
using BaoVeBienCuong.Playgame.maps;
using BaoVeBienCuong.SelectMap;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Info;
using Microsoft.Phone.Tasks;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input.Touch;
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Navigation;

namespace BaoVeBienCuong
{
    public partial class GamePage : PhoneApplicationPage
    {
        //khai báo các biến
        #region
        public static int counttocdo = 0;
        public static int speed;
        public static ContentManager contentManager;
        GameTimer timer;
        SpriteBatch spriteBatch;
        public static Map map;// đối tượng map để lấy dữ liệu
        public static int lever;// level đang chơi
        private int wave = 1;// đợt lính
        public static int[,] curmap = new int[30, 30];// lưu map đang chơi
        public static Vector2 sizeMap;//kích thước của map (hàng x cột)
        public static Vector2 DoLech;//độ lệch của map khi người dùng kéo thả
        public static float scale = 0.5f; // zoom mặc định
        public static Vector2 sizeImageBackGround; // kích thước ảnh của map
        public static int money = 300;// tiền của người chơi để mua lính
        List<Enemy> enemys; // demo 2 quân địch
        List<LinhCanChien> linhcanh; // demo 3 tướng thủ thành
        List<Coin> coins;
        ButtonsPlay[] buttons = new ButtonsPlay[10]; //10 nút chức năng trên giao diện
        Vector2 start; // vị trí bắt đầu chạm
        Vector2 curtouch; // vị trí chạm hiện tại
        SpriteFont font; // font vẽ
        Texture2D Otrong; // hình ảnh các vị trí có thể đặt
        bool isLuaTouch; // biến lưu trạng thái đang lựa chọn hỗ trợ hay ko ?
        bool isLinhTouch;//biến lưu trạng thái đang lựa chọn lính ?
        bool isNangCapTouch;// biến lưu trạng thái đang nâng cấp 1 lính
        List<Fire> fires; // tối đa 4 hiệu ứng đc lựa chọn ( tối đa 3 bẫy và 1 mưa lửa trong 1 thời điểm ) 
        int i;//biến chạy
        bool isNew;//đã làm mới game hay chưa
        Vector2 vitritouch;//vị trí mảng mà ng dùng lựa chọn
        bool isTouchedButton;
        Random rand;
        public static int life; // mạng sống
        public static SaveKyNang save;
        public static bool isPause; // cờ làm pause game
        private Texture2D waveimage;
        int timeWait = 0;
        public static int trangthaigame = 0; // 0 là đang chơi, 1 là thắng, 2 là thua
        ThongBao tb;
        int countLinhtieudiet;
        bool isCreateWaveComPlete = false;
        int countCreateWave = 0;
        int countmualua = 0;
        int countbaylua = 0;
        int maxmualua, maxbaylua;
        bool isTuongSet;
        int delaygame = 0;
        public static bool setDiem;
        Thanh thanh;
        #endregion

        public GamePage()
        {
            InitializeComponent();
            // Get the content manager from the application
            contentManager = (Application.Current as App).Content;
            // Create a timer for this page
            timer = new GameTimer();
            timer.UpdateInterval = TimeSpan.FromTicks(181818);
            timer.Update += OnUpdate;
            timer.Draw += OnDraw;
            speed = 30;
            lever = SelectMapAndStore.levelselected;
            map = new Map(lever, contentManager);
            thanh = new Thanh();
            isNew = false;
            rand = new Random();
            DoLech = new Vector2(0, 0);
            scale = 0.5f;
            save = new SaveKyNang();
            tb = new ThongBao();
            for (i = 0; i < 10; i++)
            {
                buttons[i] = new ButtonsPlay(i);
            }
        } // hàm khởi tạo mặc định của game

        public void NewGame()
        {
            setDiem = false;
            isTuongSet = false;
            trangthaigame = 0;
            countLinhtieudiet = 0;
            isPause = false;
            life = 20;
            money = 300 + (lever) * 200;
            wave = 1;
            linhcanh = new List<LinhCanChien>();
            enemys = new List<Enemy>();
            coins = new List<Coin>();
            fires = new List<Fire>();
            Fire.SoLuong = 0;
            if (lever == 0)
            {
                LinhTamXa linhtx = new LinhTamXa("archer", 2);
                linhtx.setIndex(new Vector2(3, 4));
                curmap[3, 4] = 3;
                linhcanh.Add(linhtx);
            }
            DoLech = new Vector2(0, 0);
            isCreateWaveComPlete = false;
            countCreateWave = 0;
            maxmualua = save.getFire(0);
            maxbaylua = save.getFire(1);
            MainPage.PlayNhacGame("sound_1", true);
            timeWait = 0;
            delaygame = 0;
        }

        public void LoadMap()
        {
            save = new SaveKyNang();
            rand = new Random();
            // map = new Map(lever);
            map.Load(contentManager);
            sizeImageBackGround = map.getSizeMap();
            sizeMap = map.getSize();
            curmap = map.getMap();
            font = contentManager.Load<SpriteFont>("fonts/font1");
            for (i = 0; i < 10; i++)
            {
                // buttons[i] = new ButtonsPlay(i);
                buttons[i].Load(contentManager);
            }
            Otrong = contentManager.Load<Texture2D>("images/maps/border");
            waveimage = contentManager.Load<Texture2D>("images/playScreen/icon");
            tb.Load(contentManager);
        } // Load các tài nguyên cần thiết

        protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
        {
            if (trangthaigame == 0)
            {
                if (tb.getVisible())
                {
                    tb.setVisible(false);
                    isPause = false;
                    e.Cancel = true;
                }
                else
                {
                    tb.set(0);
                    e.Cancel = true;
                }
            }
            else
            {
                MainPage.PlayNhacGame("MapSelect", true);
                e.Cancel = false;
                GC.Collect();
                return;
            }
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            // Set the sharing mode of the graphics device to turn on XNA rendering
            SharedGraphicsDeviceManager.Current.GraphicsDevice.SetSharingMode(true);
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(SharedGraphicsDeviceManager.Current.GraphicsDevice);

            // TODO: use this.content to load your game content here
            SelectMapAndStore.contentManager.Unload();
            lever = SelectMapAndStore.levelselected;

            LoadMap();
            // Start the timer
            timer.Start();

            base.OnNavigatedTo(e);
        }

        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            // Stop the timer
            isPause = true;
            buttons[0].setTouch(true);
            timer.Stop();

            // Set the sharing mode of the graphics device to turn off XNA rendering
            SharedGraphicsDeviceManager.Current.GraphicsDevice.SetSharingMode(false);

            base.OnNavigatedFrom(e);
        }

        private void OnUpdate(object sender, GameTimerEventArgs e)
        {
            // TODO: Add your update logic here
            if (speed == 50 || (speed == 30 && counttocdo % 2 != 0) || (speed == 40 && counttocdo % 5 != 0))
            {
                if (!isNew) // nếu chưa tạo game mới thì tạo mới map
                {
                    NewGame();
                    isNew = true;
                }
                else
                {
                    if (trangthaigame == 1 || trangthaigame == 2) // kết thúc trò chơi
                    {
                        #region
                        Fire.SoLuong = 0;
                        if (!setDiem)
                        {
                            tb.set(trangthaigame, countLinhtieudiet, money, wave, SelectMapAndStore.capdoselected, life);
                            if (MainPage.diemcao.isHigh(lever, tb.getTongDiem()))
                            {
                                MainPage.diemcao.themdiem(lever, tb.getTongDiem());
                            }
                            if (trangthaigame == 1)
                            {
                                FileThanh.SaveFile(ref SelectMapAndStore.thanh, lever, SelectMapAndStore.capdoselected);
                                if (SelectMapAndStore.capdoselected == 4)
                                {
                                    SelectMapAndStore.vang += (lever / 2 + 1) * 100;
                                    SelectMapAndStore.napxu.SubMoney(-(lever / 2 + 1) * 100);
                                }
                                SelectMapAndStore.sao += SelectMapAndStore.capdoselected;
                                FileThanh.saveSao((int)SelectMapAndStore.sao);
                            }
                            setDiem = true;
                        }
                        TouchCollection touchs = TouchPanel.GetState();
                        foreach (TouchLocation touch in touchs)
                        {
                            if (touch.State == TouchLocationState.Pressed)
                            {
                                start = touch.Position;
                                curtouch = touch.Position;
                            }
                            if (touch.State == TouchLocationState.Moved)
                            {
                                curtouch = touch.Position;
                                tb.isSelectBando(curtouch);
                                tb.isSelectRepeat(curtouch);
                                tb.isSelectGuiDiem(curtouch);
                            }
                            if (touch.State == TouchLocationState.Released)
                            {
                                if (tb.isSelectBando(curtouch))
                                {
                                    MainPage.PlayHieuUng("Click", false);
                                    tb.setVisible(false);

                                    MainPage.PlayNhacGame("MapSelect", true);
                                    NavigationService.GoBack();

                                }
                                if (tb.isSelectRepeat(curtouch))
                                {
                                    MainPage.PlayHieuUng("Click", false);
                                    tb.setVisible(false);
                                    trangthaigame = 0;
                                    isPause = false;
                                    for (int i = 0; i < linhcanh.Count; i++)
                                    {
                                        curmap[(int)linhcanh[i].getIndex().X, (int)linhcanh[i].getIndex().Y] = 0;
                                    }
                                    isLinhTouch = false;
                                    isLuaTouch = false;
                                    isNangCapTouch = false;
                                    isNew = false;
                                }
                                if (tb.isSelectGuiDiem(curtouch))
                                {
                                    MainPage.PlayHieuUng("Click", false);
                                    thanh.setIndex(lever);
                                    tb.setSelectGuiDiem(false);
                                    ShareLinkTask shareLinkTask = new ShareLinkTask();

                                    shareLinkTask.Title = "Tớ đã vượt qua " + thanh.getName() + " với số điểm " + tb.getTongDiem() + " , ai hơn tớ nào ?";
                                    shareLinkTask.LinkUri = new Uri("http://www.windowsphone.com/en-us/store/app/lo%E1%BA%A1n-12-s%E1%BB%A9-qu%C3%A2n/1671d059-0330-43d3-9031-d48bbd4e9427", UriKind.Absolute);
                                    shareLinkTask.Message = "Bạn có muốn phá kỉ lục của tớ không ?";

                                    shareLinkTask.Show();
                                }
                            }
                        }
                        #endregion
                    }
                    else // đang chơi
                    {
                        if (tb.getVisible()) // nếu đang hiện grid thoát
                        {
                            #region
                            isPause = true;
                            TouchCollection touchs = TouchPanel.GetState();
                            foreach (TouchLocation touch in touchs)
                            {
                                if (touch.State == TouchLocationState.Pressed)
                                {
                                    start = touch.Position;
                                    curtouch = touch.Position;
                                }
                                if (touch.State == TouchLocationState.Moved)
                                {
                                    curtouch = touch.Position;
                                    tb.isSelectBando(curtouch);
                                    tb.isSelectRepeat(curtouch);
                                }
                                if (touch.State == TouchLocationState.Released)// ng dùng nhả tay ra
                                {
                                    curtouch = touch.Position;
                                    if (tb.isSelectBando(curtouch))
                                    {
                                        MainPage.PlayHieuUng("Click", false);
                                        tb.setVisible(false);
                                        MainPage.PlayNhacGame("MapSelect", true);
                                        NavigationService.GoBack();
                                    }
                                    else if (tb.isSelectRepeat(curtouch))
                                    {
                                        tb.setVisible(false);
                                        isPause = false;
                                    }
                                }
                            }
                            #endregion
                        }
                        else
                        {
                            #region
                            if (!isCreateWaveComPlete && !isPause) // nếu đang tạo map thì tiếp tục tạo
                            {
                                isCreateWaveComPlete = NewWave(lever, wave);
                            }

                            checkBuff(); // check để hiện thị nút bấm lửa


                            if (!isPause)
                            {
                                //nơi các quân địch di chuyển 
                                #region
                                for (int i = 0; i < enemys.Count; i++)
                                {
                                    enemys[i].Dichuyen();
                                    if (!enemys[i].getEnable())
                                    {
                                        if (enemys[i].getCurMau() <= 0)
                                        {
                                            money += enemys[i].getValue();
                                            countLinhtieudiet++;
                                            if (enemys[i].getLoai() == 3)
                                            {
                                                enemys.Add(new Enemy(2, rand.Next(4, 6 + wave / 2), enemys[i].getMau() / 5, enemys[i].getHuong(), 5, enemys[i].getIndex()));
                                                enemys.Add(new Enemy(2, rand.Next(4, 6 + wave / 2), enemys[i].getMau() / 5, enemys[i].getHuong(), 5, enemys[i].getIndex()));
                                                enemys.Add(new Enemy(2, rand.Next(4, 6 + wave / 2), enemys[i].getMau() / 5, enemys[i].getHuong(), 5, enemys[i].getIndex()));
                                            }
                                            if (rand.Next(1000) % 100 > 84) coins.Add(new Coin(50, enemys[i].getIndex()));
                                        }
                                        else
                                        {
                                            life--;
                                            if (life <= 0)
                                            {
                                                MainPage.StopNhac("sound_1");
                                                MainPage.PlayNhacGame("Lose", true);
                                                trangthaigame = 2;
                                                isPause = true;
                                            }
                                        }
                                        enemys.RemoveAt(i);
                                    }
                                }
                                for (int i = 0; i < coins.Count; i++)
                                {
                                    if (!coins[i].getVisible())
                                    {
                                        coins.RemoveAt(i);
                                    }
                                }
                                if (enemys.Count == 0 && isCreateWaveComPlete)
                                {
                                    if (timeWait <= 175) timeWait++;
                                    else
                                    {
                                        if (wave >= 30)
                                        {
                                            trangthaigame = 1;
                                            MainPage.StopNhac("sound_1");
                                            MainPage.PlayNhacGame("Win", true);
                                            isPause = true;
                                        }
                                        else
                                        {
                                            if (trangthaigame == 0)
                                            {
                                                wave++;
                                                countCreateWave = 0;
                                                isCreateWaveComPlete = false;
                                            }
                                            timeWait = 0;
                                        }
                                    }
                                }
                                #endregion

                                //nơi quân ta xử lí địch
                                #region
                                for (int i = 0; i < linhcanh.Count; i++)
                                {
                                    linhcanh[i].Ban(enemys);
                                    if (!linhcanh[i].getVisible())
                                    {
                                        if (linhcanh[i].getLoai().Equals("shogun"))
                                        {
                                            isTuongSet = false;
                                        }
                                        curmap[(int)linhcanh[i].getIndex().X, (int)linhcanh[i].getIndex().Y] = 0;
                                        linhcanh.RemoveAt(i);
                                    }
                                }
                                for (int i = 0; i < fires.Count; i++)
                                {
                                    if (fires[i].getEnable())
                                    {
                                        fires[i].SatThuong(enemys);
                                    }
                                    else
                                    {
                                        fires.RemoveAt(i);
                                    }
                                }
                                #endregion

                            }

                            //nơi xử lí các sự kiện chạm của ng dùng
                            #region
                            TouchCollection touchs = TouchPanel.GetState();
                            foreach (TouchLocation touch in touchs)
                            {
                                if (touch.State == TouchLocationState.Pressed)
                                {
                                    start = touch.Position;
                                    curtouch = touch.Position;
                                }
                                if (touch.State == TouchLocationState.Moved)
                                {
                                    //khi người dùng kéo thả map
                                    #region
                                    DoLech += touch.Position - curtouch;
                                    curtouch = touch.Position;
                                    if (DoLech.X > 0) DoLech.X = 0;
                                    if (DoLech.Y > 0) DoLech.Y = 0;
                                    if (-DoLech.X + 800 > map.getSizeMap().X * scale) DoLech.X = 800 - map.getSizeMap().X * scale;
                                    if (-DoLech.Y + 480 > map.getSizeMap().Y * scale) DoLech.Y = 480 - map.getSizeMap().Y * scale;
                                    buttons[1].isTouch(curtouch);
                                    buttons[2].isTouch(curtouch);
                                    #endregion
                                }
                                if (touch.State == TouchLocationState.Released)// ng dùng nhả tay ra
                                {
                                    #region
                                    if (Vector2.Distance(curtouch, start) < 20) // để xác định là ng dùng không kéo thả mà là click
                                    {
                                        //nhặt tiền
                                        #region
                                        foreach (Coin coin in coins)
                                        {
                                            if (coin.getVisible() && coin.isTouch(curtouch))
                                            {
                                                coin.setVisible(false);
                                                money += coin.getValue();
                                                MainPage.PlayHieuUng("Gold", false);
                                                break;
                                            }
                                        }
                                        #endregion

                                        if (isNangCapTouch) //  đang nâng cấp 1 lính
                                        {
                                            #region
                                            foreach (LinhCanChien linh in linhcanh)
                                            {
                                                if (linh.getNangCap())
                                                {
                                                    if (!linh.TouchNangCap(curtouch))
                                                    {
                                                        isNangCapTouch = false;
                                                        linh.setNangCap(false);
                                                    }
                                                    else
                                                    {
                                                        if (!linh.getVisible())
                                                        {
                                                            isNangCapTouch = false;
                                                        }
                                                    }
                                                }
                                            }
                                            #endregion
                                        }
                                        else if (isLuaTouch) // nếu đang chọn 1 hiệu ứng lửa
                                        {
                                            #region
                                            vitritouch = getIndexTouch(curtouch);
                                            if (curmap[(int)vitritouch.X, (int)vitritouch.Y] == 1)
                                            {
                                                #region
                                                Fire fire = new Fire(0, save);
                                                fire.setType(i - 3);
                                                if (i == 3) countmualua += 1;
                                                else
                                                {
                                                    countbaylua += 1;
                                                    MainPage.PlayHieuUng("Trap", false);
                                                }
                                                fire.setIndex(getIndexTouch(curtouch));
                                                fires.Add(fire);
                                                #endregion
                                            }
                                            isLuaTouch = false;
                                            #endregion
                                        }
                                        else if (isLinhTouch) //nếu đang chọn mua 1 lính
                                        {
                                            #region
                                            Vector2 vitritouch = getIndexTouch(curtouch);
                                            if (curmap[(int)vitritouch.X, (int)vitritouch.Y] == 0)
                                            {
                                                //đặt lính
                                                #region
                                                if (i == 5 || i == 8 || i == 9)
                                                {
                                                    LinhCanChien linhcc = new LinhCanChien((i == 5 ? "sword" : (i == 8 ? "knight" : "shogun")), 0);
                                                    linhcc.setIndex(getIndexTouch(curtouch));
                                                    linhcanh.Add(linhcc);
                                                    if (i == 9) isTuongSet = true;
                                                }
                                                else
                                                {
                                                    LinhTamXa linhtx = new LinhTamXa((i == 6 ? "archer" : "shaman"), 0);
                                                    linhtx.setIndex(getIndexTouch(curtouch));
                                                    linhcanh.Add(linhtx);
                                                }
                                                #endregion
                                                curmap[(int)vitritouch.X, (int)vitritouch.Y] = 3;
                                                money -= buttons[i].getPrice(); // trừ tiền khi mua lính
                                            }
                                            buttons[i].setTouch(false);
                                            isLinhTouch = false;
                                            #endregion
                                        }
                                        else
                                        {
                                            isTouchedButton = false;
                                            // nếu bấm các nút chức năng
                                            #region
                                            foreach (ButtonsPlay button in buttons)
                                            {
                                                if (button.isTouch(curtouch))
                                                {
                                                    MainPage.PlayHieuUng("Click", false);
                                                    isTouchedButton = true;
                                                    i = button.getType();
                                                    if (i == 0)
                                                    {
                                                        if (isPause) isPause = false;
                                                        else isPause = true;
                                                    }
                                                    else if (i == 1)
                                                    {
                                                        if (speed == 30) speed = 40;
                                                        else if (speed == 40) speed = 50;
                                                        else speed = 30;
                                                        buttons[1].setTouch(false);
                                                    }
                                                    else if (i == 2) // chỉnh độ phóng to của map
                                                    {
                                                        #region
                                                        isLuaTouch = false;
                                                        if (scale == 0.5f) scale = 0.7f;
                                                        else if (scale == 0.7f) scale = 1.0f;
                                                        else scale = 0.5f;
                                                        if (DoLech.X > 0) DoLech.X = 0;
                                                        if (DoLech.Y > 0) DoLech.Y = 0;
                                                        if (-DoLech.X + 800 > map.getSizeMap().X * scale) DoLech.X = 800 - map.getSizeMap().X * scale;
                                                        if (-DoLech.Y + 480 > map.getSizeMap().Y * scale) DoLech.Y = 480 - map.getSizeMap().Y * scale;
                                                        buttons[2].setTouch(false);
                                                        #endregion
                                                    }
                                                    else if (i == 3 || i == 4) // các hiệu ứng lửa
                                                    {
                                                        if (!isPause)
                                                        {
                                                            isLuaTouch = true;
                                                        }
                                                    }
                                                    else if (i > 4) //chọn lính
                                                    {
                                                        if (!isPause)
                                                        {
                                                            if (isTuongSet && i == 9)
                                                            {
                                                            }
                                                            else
                                                            {
                                                                isLinhTouch = true;
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            #endregion
                                            //nếu bấm vào quân để nâng cấp
                                            #region
                                            if (isTouchedButton == false && !isPause)
                                            {
                                                foreach (LinhCanChien linh in linhcanh)
                                                {
                                                    if (linh.isTouched(curtouch))
                                                    {
                                                        linh.setNangCap(true);
                                                        isNangCapTouch = true;
                                                    }
                                                }
                                            }
                                            #endregion
                                        }
                                    }
                                    #endregion
                                }
                            }
                            #endregion
                            #endregion
                        }
                    }
                }
            }
            counttocdo++;
            if (counttocdo > 50) counttocdo = 0;
        }

        private void OnDraw(object sender, GameTimerEventArgs e)
        {
            SharedGraphicsDeviceManager.Current.GraphicsDevice.Clear(Color.Black);
            //load tài nguyên quân địch và binh lính
            #region
            foreach (Enemy enemy in enemys)
            {
                enemy.Load(contentManager);
            }
            foreach (LinhCanChien linh in linhcanh)
            {
                linh.Load(contentManager);
            }
            foreach (Coin coin in coins)
            {
                coin.Load(contentManager);
            }
            #endregion

            spriteBatch.Begin();
            map.Draw(spriteBatch); //vẽ map
            if (isLuaTouch) //  vẽ ô trống trên map
            {
                DrawOTrong(1);
            }
            else if (isLinhTouch)
            {
                DrawOTrong(0);
            }

            foreach (Fire fire in fires) // vẽ các hiệu ứng sử dụng
            {
                fire.Load(contentManager);
                fire.Draw(spriteBatch);
            }
            //vẽ quân địch và binh lính
            #region
            if (isNew)
            {
                foreach (Enemy enemy in enemys)
                {
                    enemy.Draw(spriteBatch);
                }
                foreach (LinhCanChien linh in linhcanh)
                {
                    linh.Draw(spriteBatch, font);
                }
                foreach (Coin coin in coins)
                {
                    coin.Draw(spriteBatch);
                }
            }
            #endregion

            //vẽ các nút bấm trên giao diện
            if (isLinhTouch || isLuaTouch || isNangCapTouch)
            {
                for (int k = 0; k < 3; k++)
                {
                    buttons[k].Draw(spriteBatch, font);
                }
            }
            else
            {
                if (isTuongSet) buttons[9].setTouch(true);
                foreach (ButtonsPlay button in buttons)
                {
                    button.Draw(spriteBatch, font);
                }
            }
            //đo bộ nhớ máy
            //spriteBatch.DrawString(font, (DeviceStatus.ApplicationCurrentMemoryUsage / 1024 / 1024).ToString(), new Vector2(300, 300), Color.Red);
            DrawGame();
            if (tb.getVisible())
            {
                tb.Draw(spriteBatch, font);
            }
            spriteBatch.End();

        }

        private void DrawOTrong(int thamso)
        {
            //tham số 0 là vị trí đặt lính, 1 là vị trí đặt hỗ trợ
            for (int p = 0; p < (int)sizeMap.X; p++)
            {
                for (int j = 0; j < (int)sizeMap.Y; j++)
                {
                    if (curmap[p, j] == thamso)
                    {
                        Vector2 size = new Vector2(GamePage.sizeImageBackGround.X / GamePage.sizeMap.Y, GamePage.sizeImageBackGround.Y / GamePage.sizeMap.X);
                        Vector2 position = new Vector2(j * size.X, p * size.Y);
                        spriteBatch.Draw(Otrong, position * scale + GamePage.DoLech, new Rectangle(0, 0, 128, 128),
                                            Color.White, 0, Vector2.Zero, scale, SpriteEffects.None, 0);
                    }
                }
            }
        } // vẽ các ô trống trên màn hình

        public static Vector2 getIndexTouch(Vector2 touch)
        {
            Vector2 size = new Vector2(GamePage.sizeImageBackGround.X / GamePage.sizeMap.Y, GamePage.sizeImageBackGround.Y / GamePage.sizeMap.X);
            Vector2 temp = (touch - GamePage.DoLech) / scale;
            Vector2 vitri = new Vector2((int)(temp.Y / size.Y), (int)(temp.X / size.X));
            if (vitri.X < 0) vitri.X = 0;
            if (vitri.Y < 0) vitri.Y = 0;
            if (vitri.X >= size.X) vitri.X = size.X - 1;
            if (vitri.Y >= size.Y) vitri.Y = size.Y - 1;
            return vitri;
        } //tính toán vị trí ng dùng đã lựa chọn trên màn hình

        public void checkBuff()
        {
            if (Fire.SoLuong >= 4) // nếu đã đủ 4 hiệu ứng rồi thì ko hiển thị nút bấm hiệu ứng nữa
            {
                buttons[3].setEnable(false);
                buttons[4].setEnable(false);
                if (!isLuaTouch)
                {
                    buttons[3].setTouch(true);
                    buttons[4].setTouch(true);
                }
            }
            else
            {
                buttons[3].setEnable(true);
                buttons[4].setEnable(true);
                if (!isLuaTouch)
                {
                    buttons[3].setTouch(false);
                    buttons[4].setTouch(false);
                }
                if (countmualua >= maxmualua)
                {
                    buttons[3].setEnable(false);
                    if (!isLuaTouch)
                    {
                        buttons[3].setTouch(true);
                    }
                }
                if (countbaylua >= maxbaylua)
                {
                    buttons[4].setEnable(false);
                    if (!isLuaTouch)
                    {
                        buttons[4].setTouch(true);
                    }
                }
            }
        } // kiểm tra việc hiển thị các nút bấm hỗ trợ

        public bool NewWave(int lever, int wave)
        {
            double tongmau = 0;
            tongmau = 60 + 180 * (lever + 1) * Math.Sqrt(SelectMapAndStore.capdoselected) + wave * 85 * Math.Sqrt(Math.Sqrt(wave));
            if (wave >= 20) tongmau += (wave * 1.5f + Math.Pow(SelectMapAndStore.capdoselected, 2)) * 15;
            int solinh = (wave + lever) / 2 + 5;
            if (wave == 1)
            {
                if (delaygame < 200) delaygame++;
            }
            if (!(wave == 1 && delaygame < 200))
            {
                if (countCreateWave % 30 == 0)
                {
                    enemys.Add(new Enemy(rand.Next(100) % 6, rand.Next(6, 8 + wave / 2), (int)tongmau / solinh + rand.Next(-10, 10) * wave, map.XacDinhHuong(), 0, map.getBeGin()));
                    if (wave >= 30 && countCreateWave / 30 == solinh - 1)
                    {
                        enemys.Add(new Enemy(6, rand.Next(10, 15), (int)(tongmau / 5), map.XacDinhHuong(), 0, map.getBeGin()));
                    }
                }
                countCreateWave++;
            }
            if (countCreateWave / 30 == solinh)
                return true;
            else return false;
        } // tạo đợt lính cho game

        public void DrawGame()
        {
            spriteBatch.DrawString(font, money.ToString(), new Vector2(400, 20), Color.White);
            spriteBatch.Draw(waveimage, new Vector2(450, 0), new Rectangle(128, 0, 128, 128), Color.White, 0, Vector2.Zero, 0.5f, SpriteEffects.None, 0);
            spriteBatch.DrawString(font, wave.ToString() + " / 30", new Vector2(550, 20), Color.White);
            spriteBatch.Draw(waveimage, new Vector2(600, 0), new Rectangle(0, 0, 128, 128), Color.White, 0, Vector2.Zero, 0.5f, SpriteEffects.None, 0);
            spriteBatch.DrawString(font, life.ToString(), new Vector2(700, 20), Color.White);
            spriteBatch.Draw(waveimage, new Vector2(750, 0), new Rectangle(256, 0, 128, 128), Color.White, 0, Vector2.Zero, 0.5f, SpriteEffects.None, 0);
        }
    }
}